#!/bin/bash
# prepare_rootfs.sh

# 设置根文件系统路径
ROOTFS_DIR="/opt/sandbox/rootfs"

# 确保目录存在并有正确权限
sudo rm -rf ${ROOTFS_DIR}
sudo mkdir -p ${ROOTFS_DIR}
sudo chmod 755 ${ROOTFS_DIR}

echo "准备根文件系统在: ${ROOTFS_DIR}"

# 创建基本目录结构
sudo mkdir -p ${ROOTFS_DIR}/{bin,dev,etc,lib,lib64,proc,root,run,sbin,sys,tmp,usr,var}

# 复制基本命令
copy_command() {
    local cmd=$1
    local dest=$2
    
    # 检查命令是否存在
    if [ ! -f "$cmd" ]; then
        echo "警告: 命令 $cmd 不存在"
        return
    fi
    
    # 复制命令（使用sudo）
    sudo cp "$cmd" "$dest"
    
    # 复制依赖库
    ldd "$cmd" | grep "=> /" | awk '{print $3}' | while read lib; do
        # 创建目标目录（使用sudo）
        sudo mkdir -p "${ROOTFS_DIR}$(dirname $lib)"
        # 复制库文件（使用sudo）
        sudo cp "$lib" "${ROOTFS_DIR}$lib"
    done
}

# 复制基本命令
copy_command /bin/bash ${ROOTFS_DIR}/bin/
copy_command /bin/ls ${ROOTFS_DIR}/bin/
copy_command /bin/cat ${ROOTFS_DIR}/bin/
copy_command /bin/sh ${ROOTFS_DIR}/bin/
copy_command /usr/bin/g++ ${ROOTFS_DIR}/bin/  # 添加编译器

# 创建必要的设备文件
sudo mknod -m 666 ${ROOTFS_DIR}/dev/null c 1 3
sudo mknod -m 666 ${ROOTFS_DIR}/dev/zero c 1 5
sudo mknod -m 666 ${ROOTFS_DIR}/dev/random c 1 8
sudo mknod -m 666 ${ROOTFS_DIR}/dev/urandom c 1 9

# 复制必要的系统文件
sudo cp /etc/passwd ${ROOTFS_DIR}/etc/
sudo cp /etc/group ${ROOTFS_DIR}/etc/
sudo cp /etc/nsswitch.conf ${ROOTFS_DIR}/etc/

# 设置权限
sudo chown -R $(id -u):$(id -g) ${ROOTFS_DIR}
sudo chmod 755 ${ROOTFS_DIR}/bin/*
sudo chmod 1777 ${ROOTFS_DIR}/tmp

# 创建语言专用目录
for lang in cpp python java; do
    lang_dir="${ROOTFS_DIR}/$lang"
    sudo mkdir -p ${lang_dir}
    sudo cp -r ${ROOTFS_DIR}/bin ${lang_dir}/
    sudo cp -r ${ROOTFS_DIR}/lib ${lang_dir}/
    sudo cp -r ${ROOTFS_DIR}/lib64 ${lang_dir}/
    
    # 为每种语言添加特定文件
    case $lang in
        cpp)
            # 添加C++特定库
            copy_command /usr/bin/g++ ${lang_dir}/bin/
            ;;
        python)
            # 添加Python
            copy_command /usr/bin/python3 ${lang_dir}/bin/
            ;;
        java)
            # 添加Java
            copy_command /usr/bin/java ${lang_dir}/bin/
            ;;
    esac
done

echo "根文件系统准备完成"
echo "目录结构:"
# 检查并安装tree命令
if ! command -v tree &> /dev/null; then
    echo "安装tree命令..."
    sudo apt update
    sudo apt install -y tree
fi
tree -L 2 ${ROOTFS_DIR} | head -20